// 公共的业务逻辑处理

// 配置基地址
axios.defaults.baseURL = 'https://hmajax.itheima.net';

// 封装轻提示
function showToast(msg) {
    // 把提示标签结构获取过来
    const myToast = document.querySelector('.my-toast')
    // 实例化toast
    const dialog = new bootstrap.Toast(myToast)
    // 修改提示内容
    document.querySelector('.toast-body').innerHTML = msg
    // 显示轻提示
    dialog.show()
}


// 页面访问控制(页面鉴权)
function checkLogin() {
    // 判断用户是否有权限访问页面 -> 权限 -> 通过token来确定
    // 如果登录了就会有token 如果没有登录就没有token
    // 如果没有token , 去登录页进行登录
    const token = localStorage.getItem('token')
    if (!token) {
        setTimeout(() => {
            location.href = 'login.html'
        }, 2000)
    }
}

// 退出登录业务
function logout() {
    const logout = document.querySelector('#logout')
    logout.addEventListener('click', function () {
        // 清空用户名
        localStorage.removeItem('user')
        // 清空token
        localStorage.removeItem('token')

        // 页面跳转
        setTimeout(() => {
            location.href = 'login.html'
        }, 1000)
    })
}

// 添加请求拦截器
axios.interceptors.request.use(function (config) {
    // 在发送请求之前做些什么
    // 获取token
    const token = localStorage.getItem('token')
    // 判断是否有token
    if (token) {
        // 在请求头统一设置token
        config.headers.Authorization = token
    }

    return config;
}, function (error) {
    // 对请求错误做些什么
    return Promise.reject(error);
});


// 添加响应拦截器
axios.interceptors.response.use(function (response) {
    // 2xx 范围内的状态码都会触发该函数。
    // 对响应数据做点什么
    console.log('response:', response.data)
    // 因为后台的数据嵌套比较深 咱们可以通过响应拦截器进行数据剥离
    // response 是后台响应的数据
    return response.data;
}, function (error) {
    // 超出 2xx 范围的状态码都会触发该函数。
    // 拿到token失效的错误信息
    // console.dir(error)
    // 判断token是否失效(超时/篡改) 一旦失效会返回401状态码
    // 如果失效了 就要重新获取token
    if (error.response.status === 401) {
        // 清除用户名和token
        localStorage.removeItem('user')
        localStorage.removeItem('token')
        // 跳转到登录页
        setTimeout(() => {
            location.href = 'login.html'
        }, 1000);
    }
    // 对响应错误做点什么
    return Promise.reject(error);
});